const express = require('express');
const router = express.Router();
const bcrypt = require('bcryptjs');
const jwt = require('jsonwebtoken');
const User = require('../models/User');
const auth = require('../middleware/auth');

// 注册
router.post('/register', async (req, res) => {
  try {
    console.log('收到注册请求:', req.body);
    const { name, email, password } = req.body;

    // 验证请求数据
    if (!name || !email || !password) {
      console.log('缺少必要信息:', { name: !!name, email: !!email, password: !!password });
      return res.status(400).json({ message: '请提供所有必要信息' });
    }

    // 检查邮箱是否已存在
    console.log('检查邮箱是否已存在:', email);
    const existingUser = await User.findOne({ email });
    if (existingUser) {
      console.log('邮箱已被注册:', email);
      return res.status(400).json({ message: '该邮箱已被注册' });
    }

    // 创建新用户
    console.log('创建新用户:', { name, email });
    const user = new User({
      name,
      email,
      password
    });

    console.log('保存用户...');
    await user.save();
    console.log('用户保存成功');

    // 生成 token
    console.log('生成 token...');
    const token = jwt.sign(
      { id: user._id },
      process.env.JWT_SECRET || 'your-secret-key',
      { expiresIn: '7d' }
    );
    console.log('token 生成成功');

    // 返回用户信息和 token
    res.status(201).json({
      token,
      user: {
        id: user._id,
        email: user.email,
        name: user.name
      }
    });
  } catch (error) {
    console.error('注册错误:', error);
    if (error.name === 'ValidationError') {
      return res.status(400).json({ 
        message: '验证错误',
        errors: Object.values(error.errors).map(err => err.message)
      });
    }
    if (error.code === 11000) {
      return res.status(400).json({ message: '该邮箱已被注册' });
    }
    res.status(500).json({ message: '服务器错误' });
  }
});

// 登录
router.post('/login', async (req, res) => {
  try {
    console.log('收到登录请求:', req.body);
    const { email, password } = req.body;

    // 验证请求数据
    if (!email || !password) {
      console.log('缺少必要信息:', { email: !!email, password: !!password });
      return res.status(400).json({ message: '请提供邮箱和密码' });
    }

    // 查找用户
    console.log('查找用户:', email);
    const user = await User.findOne({ email });
    if (!user) {
      console.log('用户不存在:', email);
      return res.status(401).json({ message: '邮箱或密码错误' });
    }

    // 验证密码
    console.log('验证密码...');
    const isMatch = await user.comparePassword(password);
    if (!isMatch) {
      console.log('密码错误:', email);
      return res.status(401).json({ message: '邮箱或密码错误' });
    }
    console.log('密码验证成功');

    // 生成 token
    console.log('生成 token...');
    const token = jwt.sign(
      { id: user._id },
      process.env.JWT_SECRET || 'your-secret-key',
      { expiresIn: '7d' }
    );
    console.log('token 生成成功');

    // 返回用户信息和 token
    res.json({
      token,
      user: {
        id: user._id,
        email: user.email,
        name: user.name
      }
    });
  } catch (error) {
    console.error('登录错误:', error);
    res.status(500).json({ message: '服务器错误' });
  }
});

// 获取当前用户信息
router.get('/me', auth, async (req, res) => {
  res.json(req.user);
});

module.exports = router; 